Skip to content

feat: 新增内置 tab「文件追踪」——会话文件操作记录与逐行 diff(移植 dsh-file-trace) - #471

Merged
Menghuan1918 merged 2 commits into
omdsh-dev:mainfrom
lhh010:feat/file-trace-tab
Aug 31, 2026
Merged

feat: 新增内置 tab「文件追踪」——会话文件操作记录与逐行 diff(移植 dsh-file-trace)#471
Menghuan1918 merged 2 commits into
omdsh-dev:mainfrom
lhh010:feat/file-trace-tab

Conversation

@lhh010

@lhh010 lhh010 commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

摘要

新增第 8 个内置 tab「文件追踪」(file-trace):记录模型在本会话读 / 写 / 编辑过的每一个文件,点开任意操作查看行级 diff 或带行号的内容视图。移植自独立维护的 dsh-file-trace 插件(该插件仍继续独立维护,与本内置 tab 可共存——内置 tab 在设置页可整体关闭)。

实现要点

  • 数据层src/client/filetrace/ops.ts):直接折叠会话事件日志tool/call + tool/result 对)提取文件操作,符合仓库「读事件日志而非动注册表」的取向;错误结果捕获真实错误文本;ctx.on('session/event') 实时追加(visible === false 时暂停、恢复时追平,事件量有上限)。
  • 视图FileTraceTab.tsx):操作列表(按文件分组、最新在前)+ 底部可拖拽 diff 面板;行级 diff(删红 / 增绿 / 改蓝)+ mod 行行内字符级高亮;读取视图剥掉读工具信封显示真实行号;失败操作统一展示真实错误文本(不渲染伪造 diff);长行折叠与 hunk 上下文折叠。
  • 语法着色highlight.ts,轻量正则分词器):关键字 / 字符串 / 数字 / 类型 / 函数 / 注释 / 预处理各配色,色相经 color-mix 全部落在 diff 三色(红绿蓝)之间的空档(紫 / 青 / 品红 / 暖金),只消费 --dsw-alias-* 令牌(皮肤契约);跨行块注释状态按行序推导(读取视图沿行序、diff 旧 / 新侧各沿行号序)。
  • 注册:单实例 tab,+ 菜单 order 55,角标显示操作数;每个 tab 自带的设置开关即为与独立插件共存的退出通道。

遵循仓库约束

  • 皮肤契约:仅 --dsw-alias-* / --ds-* 令牌,无硬编码颜色(theme.spec.ts 通过)。
  • i18n:10 个新 key 已同步全部 21 个词典locales.spec.ts key-set 测试通过)。
  • 文档:README / README_EN / external-plugin-guide 内置清单 7→8 已同步。
  • 测试:新增 tests/filetrace.spec.ts(事件折叠 / 读取解析 / diff·highlight 冒烟,9 例);builtins.spec.ts 7→8。

验证

  • pnpm typecheck ✅;pnpm build
  • 新增/改动相关测试全绿(filetrace 9 / builtins 23 / locales 17 / theme 9)
  • 本机 Windows 环境下 agent-pty / git* / install-powershell / smoke / fs-operations 存在预存的环境相关失败(已在干净 main 上复现同样失败,与本次改动无关)

- 数据层:直接折叠会话事件日志(tool/call + tool/result 对)提取文件操作,
  与仓库「读事件日志而非动注册表」的取向一致;含错误文本捕获与
  running 态实时更新(ctx.on('session/event'),不可见时暂停、恢复时追平)
- 视图:操作列表 + 底部可拖拽 diff 面板;行级 diff(删红/增绿/改蓝)+
  行内字符级高亮;读取视图带真实行号;失败操作统一展示真实错误文本
- 语法着色:轻量分词器(关键字/字符串/数字/类型/函数/注释/预处理),
  色相经 color-mix 落在 diff 三色之间的空档;跨行块注释状态按行序推导
- 单实例 tab,+ 菜单 order 55,角标显示操作数;设置页可整体关闭
  (与独立维护的 dsh-file-trace 插件共存)
- i18n:10 个新 key 同步全部 21 个词典;builtins 测试 7→8;
  README/指南内置清单同步
@lhh010

lhh010 commented Aug 30, 2026

Copy link
Copy Markdown
Contributor Author

补充说明:本 tab 移植自我的独立插件 dsh-file-trace,仓库在这里:https://github.com/lhh010/dsh-file-trace (会持续独立维护,欢迎 star / 提 issue)。better-sidebar 内置版与独立版可共存,内置 tab 可在设置页整体关闭。

…uide version line (keep 8-tab count, adopt v0.18.0-alpha.0 alpha-track wording)
Menghuan1918 added a commit that referenced this pull request Aug 31, 2026
feat!: 文件变动统一 tab——Git 面板 + 文件追踪(PR #471)二为一,统一 diff 渲染栈
@Menghuan1918
Menghuan1918 merged commit 9255040 into omdsh-dev:main Aug 31, 2026
2 checks passed
pull Bot pushed a commit to LDGAGI/DSH-better-sidebar that referenced this pull request Aug 31, 2026
在 PR omdsh-dev#471(file-trace)基础上的演进:

- 合并 tab:git tab(id 保留,兼容持久化布局)升级为「文件变动」双视角
  tab——Git 视角(原 GitView 全部能力:staged/unstaged/提交/历史/worktree·
  子仓库选择/右键菜单/确认弹窗)+ 本轮文件视角(原 file-trace:会话事件
  日志实时折叠的模型读写编辑记录,按文件分组、新增类型筛选 chips、相对
  时间);file-trace tab 移除(未随任何版本发布)。
- 统一 diff 组件:新 src/client/diff/ 模块(rows.ts 引擎 + DiffRows/
  DiffFiles 渲染器 + highlight.ts 语法着色)——git diff 与会话操作 diff
  共用一套渲染:mod 改写配对(del-run/add-run 对半标蓝)、行内字符级
  高亮(修复了旧实现旧侧失配不高亮的问题,改为行对象身份键)、上下文
  hunk 折叠、git hunk 间未输出区间按行号范围生成不可展开折叠、语法着色
  色相落位 diff 三色空档、+n −m 统计 chips、行底色 tint;DiffTab 改用
  该栈(git diff tab 从此也有高亮)。
- 交互:两视角共用底部可拖拽预览面板(点击文件/提交/操作即预览,不再
  直接开 diff tab;面板可刷新、可键盘/拖拽调高、git 目标可一键展开为
  独立 diff tab);视角选择与面板高度持久化在 tab.meta;git 行 XY 徽章
  按状态字母着色;选中行高亮。
- i18n:fileTrace* 十键重命名为 changes* 前缀,git 键值更新为「文件
  变动」,新增 7 键(视角/筛选/面板操作),全部 21 个词典同步。
- 结构:src/client/changes/(ChangesTab/GitLens/SessionLens/DiffPane/
  ops)+ src/client/diff/;GitView/DiffView/filetrace/ 删除;git 样式
  从 sidebar.module.css 迁至 changes.module.css。
- 测试:builtins 8→7(git tab 承接 badge pin)、diff-rows(unified
  转换/mod 配对/间隙折叠/统计)、changes-tab(壳交互 jsdom)、
  diff-files-collapse(原 DiffView 折叠行为钉住)、changes-ops(原
  filetrace 数据层)、git-view-worktree 迁移至 GitLens;全量 1122 通过。
- 文档:README ×2 功能矩阵合并、external-plugin-guide §4.4 与内置清单
  7 tab、mount e2e 菜单标题同步。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants